package com.hd.manager.util;

import com.itextpdf.text.BaseColor;
import com.itextpdf.text.Font;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.pdf.PdfPCell;
import com.itextpdf.text.pdf.PdfPTable;
import org.springframework.stereotype.Component;

@Component
public class PDFUtil {

    /**
     * 设置标题
     * @param table PTable表格
     * @param textFont 字体样式
     * @param value 添加的内容
     * @param cols 合并几列
     * @param rows 合并几行
     * @param middleType 居中类型 0:不居中, 1:水平居中 2:垂直居中
     * @return PTable表格
     */
    public PdfPTable getTitle(PdfPTable table, Font textFont, String value, Integer cols, Integer rows, Integer middleType){
        PdfPCell cell = new PdfPCell();
        Paragraph p = new Paragraph(value, textFont);
        cell.setColspan(cols);
        cell.setRowspan(rows);
        if(middleType == 1){
            p.setAlignment(1);
            getHorizontalCenter(cell);
        }else if(middleType == 2){
            p.setAlignment(1);
            getVerticalCenter(cell);
        }
        cell.setBorderColor(BaseColor.WHITE);// 设置方向后会失效
        cell.addElement(p);
        table.addCell(cell);
        return table;
    }

    /**
     * 设置单元格
     * @param table PTable表格
     * @param textFont 字体样式
     * @param value 添加的内容
     * @param middleType 居中类型 0:不居中, 1:水平居中 2:垂直居中
     * @return PTable表格
     */
    public PdfPTable getPdfCell(PdfPTable table, Font textFont, String value, Integer middleType){
        PdfPCell cell = new PdfPCell();
        Paragraph p = new Paragraph(value, textFont);
        if(middleType == 1){
            p.setAlignment(1);
            getHorizontalCenter(cell);
        }else if(middleType == 2){
            p.setAlignment(1); // -1:未定义，0:左，1:中，2:右，3:合适的，4:上，5:中，6:下，7:底线
            getVerticalCenter(cell);
        }
        cell.addElement(p);
        table.addCell(cell);
        return table;
    }

    /**
     * 合并行（合并行(上下合并)时，设置为垂直居中）
     * @param table PTable表格
     * @param textFont 字体样式
     * @param value 添加的内容
     * @param rows 合并几行
     * @param middleType 居中类型 0:不居中, 1:水平居中 2:垂直居中
     * @return PTable表格
     */
    public PdfPTable getRowSpan(PdfPTable table, Font textFont, String value, Integer rows, Integer middleType){
        PdfPCell cell = new PdfPCell();
        Paragraph p = new Paragraph(value, textFont);
        cell.setRowspan(rows);
        if(middleType == 2){
            p.setAlignment(1);
            getVerticalCenter(cell);
        }
        cell.addElement(p);
        table.addCell(cell);
        return table;
    }

    /**
     * 合并列（合并列(左右合并)时，设置为水平居中）
     * @param table PTable表格
     * @param textFont 字体样式
     * @param value 添加的内容
     * @param cols 合并几列
     * @param middleType 居中类型 0:不居中, 1:水平居中 2:垂直居中
     * @return PTable表格
     */
    public PdfPTable getColSpan(PdfPTable table, Font textFont, String value, Integer cols, Integer middleType){
        PdfPCell cell = new PdfPCell();
        Paragraph p = new Paragraph(value, textFont);
        cell.setColspan(cols);
        if(middleType == 1){
            p.setAlignment(1);
            getHorizontalCenter(cell);
        }else if(middleType == 2){
            p.setAlignment(1);
            getVerticalCenter(cell);
        }
        cell.addElement(p);
        table.addCell(cell);
        return table;
    }

    /**
     * 合并行和列
     * @param table PTable表格
     * @param textFont 字体样式
     * @param value 添加的内容
     * @param cols 合并几列
     * @param rows 合并几行
     * @param middleType 居中类型 0:不居中, 1:水平居中 2:垂直居中
     * @return PTable表格
     */
    public PdfPTable getRowAndColSpan(PdfPTable table, Font textFont, String value,
                                      Integer cols, Integer rows, Integer middleType){
        PdfPCell cell = new PdfPCell();
        Paragraph p = new Paragraph(value, textFont);
        cell.setColspan(cols);
        cell.setRowspan(rows);
        if(middleType == 1){
            p.setAlignment(1);
            getHorizontalCenter(cell);
        }else if(middleType == 2){
            p.setAlignment(1);
            getVerticalCenter(cell);
        }
        cell.addElement(p);
        table.addCell(cell);
        return table;
    }

    /**
     * 水平居中
     * @param cell PdfPCell单元格
     * @return PdfPCell单元格
     */
    public PdfPCell getHorizontalCenter(PdfPCell cell){
        cell.setHorizontalAlignment(PdfPCell.ALIGN_CENTER);// 水平居中
        return cell;
    }

    /**
     * 垂直居中
     * @param cell PdfPCell单元格
     * @return PdfPCell单元格
     */
    public PdfPCell getVerticalCenter(PdfPCell cell){
        cell.setHorizontalAlignment(PdfPCell.ALIGN_CENTER);
        cell.setVerticalAlignment(PdfPCell.ALIGN_MIDDLE);
        cell.setPaddingTop(-2f);//把字垂直居中
        cell.setPaddingBottom(8f);//把字垂直居中
        return cell;
    }
}

